package com.inspur.security.cbb3.kms.keks.service;

import com.inspur.security.cbb3.kms.keks.po.KeksBean;
import com.inspur.security.cbb3.kms.keks.vo.CipherTextVo;
import javassist.NotFoundException;
import org.springframework.web.bind.MissingServletRequestParameterException;

/**
 * KeksService
 *
 * @author liukai
 * @date 2020/10/26
 **/
public interface KeksService {

    /**
     * 新增二级密钥
     * @param keksBean
     * @return
     */
    KeksBean addKek(KeksBean keksBean);

    /**
     * 根据uuid获取二级密钥
     * @param uuid
     * @return
     */
    String getKekByUuid(String uuid) throws NotFoundException, MissingServletRequestParameterException;

    /**
     * 获取当前默认使用的二级主密钥，active值为1
     * @return
     * @param creatorId 用户主键
     */
    KeksBean getActiveKek(String creatorId) throws NotFoundException;

    /**
     * 根据用户及明文获取用户二级密钥加密密文
     * @param plainText 明文信息
     * @param creatorId 操作用户uuid
     * @return  加密密文
     */
    CipherTextVo getEncryptString(String plainText, String creatorId);

    /**
     * 根据用户及密文获取密文解密信息
     * @param cipherText    密文信息
     * @param kekId 二级密钥uuid
     * @return  解密明文
     */
    String getDecryptString(String cipherText, String kekId);

    /**
     * 更新二级密钥Active状态
     * @param uuid
     */
    void updateActiveStatus(int active,String uuid) throws NotFoundException, MissingServletRequestParameterException;

    /**
     * 密钥轮转
     */
    void keksRotate();
}
